""""""
'''
1、(app)简述appium 工作原理
appium 是一个开源的测试工具，用于测试移动应用。
appium 的工作原理是：
简单来说appium充当⼀个中间服务器的功能，接收来⾃我们代码的请求，然后发送到⼿机上进⾏执⾏。

• ⾃动化脚本向AppiumServer发送注册参数（URL，platformName，platformVersion，deviceName，appPackage，appActivity）?
• AppiumServer将bootstrap.jar包放⼊⼿机端中
• ⼿机端⽤bootstrap启动⼿机端⼝（4723），并将端⼝返回给AppiumServer（相当于建⽴好了通信连接）
• ⾃动化脚本发送请求（操作或命令或动作）给AppiumServer?
• AppiumServer将请求解析并发送给bootstrap?
• bootstrap将请求解析发给UIAutomator?
• UIAutomator执⾏相应的操作并将结果返回给bootstrap?
• bootstrap将响应结果返回给AppiumServer?
• AppiumServer将响应结果返回到脚本?

完成以下题目要求，写出对应的命令(案例测试包:com.sina.weibo)
2、(app)在手机端创建/data/test文件夹。【5分】
    adb shell mkdir /data/test
    
3、(app)将本地 E:/LOG1.TXT 文件上传到新创建的文件加下。并查看当前目录下的文件。【10分】
    adb push E:/LOG1.TXT /data/test
    
4、(app)将/data/test 文件夹下的所有文件传输到本地 D:/db 目录下。【5分】
    adb pull /data/test D:/db
    
5、(app)导出的W级别的日志，并且保存在 E:/logsina.txt。并査看微博占用的内存。然后清除微博应用的缓存信息【15分】
    adb logcat -v time -s "com.sina.weibo" > E:/logsina.txt
    
6、(app)获取当前电池的状态和信息【5分】
    adb shell dumpsys battery
    
7、(app)设置电池电量的百分比，要将电量设置为100%，电池状态复位，使其恢复到实际的电量状态【10分】
    adb shell dumpsys battery set level 100 status 1
    
8、(app)修改电池是否存在状态，修改为否。然后恢复原始状态【10分】
    adb shell dumpsys battery set present 0

9、(app)将电池的状态码修改为电池充满状态。【5分】
    adb shell dumpsys battery set status 5
    
10、(app)app做健壮测试，日志级别详细，点击事件50%，滑动事件30%，种子数为200，操作1000次。将操作日志导出E:\LOG2.TXT.【10 分】
    adb shell monkey -p com.sina.weibo -v -v -v --pct-touch 50 --pct-motion 30 -s 200 1000 > E:\LOG2.TXT
    
11、(app)对app做健壮性测试，日志级别为详细，要求屏幕旋转事件百分比事件10%，滑动事件20% ，基本导航事件百分比为30%，其他事件百分比为20%。
    且每个时间延迟1000ms。种子数为2000，操作10000次。并将操作日志导出到E:\LOG3.TXT。【15分】
    adb shell monkey -p com.sina.weibo -v -v -v --pct-rotation 10 --pct-motion 20 --pct-nav 30 
    -throttle 1000 -s 2000 10000 > E:\LOG3.TXT

12、(app)appium 连接模拟器或者真机的5大参数是什么?写出对应的参数查看相对的命令。【10分】
    参数名                             含义                                  示例值
    platformName                设备操作系统类型                            Android / iOS
    platformVersion             操作系统版本                                 10 / 14.5
    deviceName                  设备名称（任意字符串标识）                   emulator-5554 / iPhone 13
    appPackage                  被测应用的包名（Android）                    com.sina.weibo
    appActivity                 应用启动时的入口 Activity（Android）          .SplashActivity

13、(web)阐述你们公司的自动化代码框架设计的思想?为什么要这样做?有什么好处。【10分】


14、(web)请描述自动化测试当中三大等待时间，给出相应的代码和包。并详细阐述适用的场景。【10分】
    强制等待        使用 time.sleep() 强制程序暂停指定时间      1.脚本调试时临时使用 2.页面加载非常慢且无法预测加载时间的场景
    隐式等待        设置全局等待时间，适用于所有查找元素的操作      1.页面元素整体加载较慢但相对稳定的场景 2.全局设置等待策略，简化脚本编写
    显式等待        针对特定条件进行等待，直到满足为止           1.等待特定条件成立后再继续执行（如元素可见、可点击、弹窗出现）2.页面存在大量 AJAX 请求或动态加载内容 3.需要精确控制等待行为的复杂场景
    (1) 强制等待
    import time
    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    
    # 强制等待5秒
    time.sleep(5)
    
    element = driver.find_element("id", "some-element")

    (2) 隐式等待
    from selenium import webdriver

    driver = webdriver.Chrome()
    # 设置最大等待时间为10秒
    driver.implicitly_wait(10)
    
    driver.get("https://www.example.com")
    
    # 查找元素时会自动等待最多10秒
    element = driver.find_element("id", "some-element")

    (3) 显式等待

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    
    # 等待某个元素可见
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.visibility_of_element_located((By.ID, 'some-element')))
    element.click()

15、(web)web测试app测试有什么区别?(10分)
    1. 运行环境不同
        Web 测试：基于浏览器运行，需测试多种浏览器（如 Chrome、Firefox、Safari）的兼容性。
        App 测试：安装在移动设备上运行，需覆盖 Android 和 iOS 不同系统版本及设备型号。
     
    2. 用户交互方式不同
        Web 测试：以鼠标点击、键盘输入为主。
        App 测试：涉及触控操作（滑动、长按、双击）、手势（缩放、旋转）、传感器操作（陀螺仪、重力感应）等。
     
    3. 测试工具不同
        Web 测试常用工具：Selenium、Playwright、Cypress
        App 测试常用工具：Appium、Espresso（Android）、XCUITest（iOS）
     
    4. 网络和性能关注点不同
        Web 测试：关注页面加载速度、响应时间、HTTP 请求/响应。
        App 测试：更注重电池消耗、内存占用、弱网模拟、离线功能等移动端特性。
     
    5. 安全性测试重点不同
        Web 测试：关注 XSS、CSRF、SQL 注入、HTTPS 安全等。
        App 测试：关注反编译、数据加密、Root 检测、权限管理等。
     
    6. 持续集成方式不同
        Web 测试：容易在 CI 中自动执行，无需依赖真实设备。
        App 测试：通常需要连接模拟器或真机，部分场景依赖云测平台（如 BrowserStack、AWS Device Farm）。
     
    总结一句话
        Web 测试更注重跨浏览器兼容性和前端逻辑，而 App 测试更关注设备适配、原生交互和移动端性能。

16、(web)写出以下相对路径的含义。(10分)

    //input[last()]
        选择页面中所有 <input> 元素中的最后一个。
        
    //input[@name='password' or @pwd='123456’]
        选择页面中所有 <input> 元素，name 属性值为 'password' 或 pwd 属性值为 '123456'
        
    //input[@name ='password' and @pwd ='123456']
        选择页面中所有 <input> 元素，name 属性值为 'password' 且 pwd 属性值为 '123456'
    
    //*[text()='python 测试开发’]
        选择页面中所有标签（任意标签），其文本内容完全等于 "python 测试开发"。
    
    //*[contains(text(),python 开发')]
        选择页面中所有标签，其文本内容包含 'python 开发' 字符串。
        
17、(app)简述一个新上线的 app和小程序，我们可以对他们进行那些测试。列出对应的测试的测试点。【10分】
    试类型            App 测试重点              小程序 测试重点
    功能测试        登录、接口、表单、Push       授权、页面、分享、缓存
    兼容性测试       系统、机型、分辨率            微信版本、设备型号
    UI 测试          布局、动画、交互             组件样式、阅读体验
    性能测试        启动时间、内存、CPU           加载速度、资源消耗
    弱网测试         接口超时、重试机制            网络切换、提示信息
    安全性测试         Root 检测、加密            接口防护、权限管理
    安装/升级测试     安装卸载、版本更新            自动更新、缓存清除
    健壮性测试       Monkey 测试、长时间运行        多次点击、滑动测试
    边界测试            输入长度、数值边界           时间、文本限制
    回归测试                新版本验证             Bug 修复后复测
    
    
18、(app)请写出app的安装、卸载的测试点。【10分】
    安装：
        1.正常安装测试，检查是否安装成功。
        2.APP版本覆盖测试。例如：先安装⼀个1.0版本的APP,再安装⼀个⾼版本(1.1版本)的APP，检查是否被覆盖。
        3.回退版本测试。例如：先装⼀个2.0版本的APP,再安装⼀个1.0版本的APP,正常情况下版本是可以回退的。
        4.安装时内存不⾜，弹出提⽰。
        5.安装过程中的意外情况（强⾏断电、断⽹、来电话了、查看信息）等等，检查会发⽣的情况。
        6.在不同型号、系统、屏幕⼤⼩、分辨率上的⼿机进⾏安装。
        7.安装时是否识别有SD卡，并默认安装到sd卡中。
        8.安装完成后，重启⼿机能否正常启动应⽤程序。
        9.安装完成后，是否对其他应⽤程序造成影响。
        10.安装完成后，杀毒软件是否会对其当做病毒处理。
        11.在安装过程中，所有的提⽰信息中不能出现代码、符号、乱码等。
        12.是否⽀持第三⽅安装。
        13.在安装中点击取消或杀掉进程，是否还能重新安装
    卸载
        卸载关注点：卸载过程中的意外情况处理（取消、死机、重启、断电、内存不⾜、断⽹）、卸载进度条；
        ◦ 死机就是冻屏，停留在⼀个界⾯没反应。死机问题很少遇到，且⼤多不是⼀个⽤层问题，下⾯简单说下可能造成死机的原因和分析需要信息
            ▪ 逻辑卡顿(block)
                • 死循环(Deadloop)
                • 死锁(Deadlock)
            ▪ 逻辑⾏为异常
                • 逻辑判断错误
                • 逻辑设计错误
    
    
19、请写出app的push推送、更新(强制更新、非强制更新)的测试点。【10分】
    1.APP的push推送主要测试点有：
        1>什么场景下会触发push
        2>push消息内容的准确性
        3>push推送的⽤⼾是否准确（全部推送/部分推送/指定⽤⼾推送）
        4>push推送消息的点击跳转是否正常
        5>app在前台运⾏和后台运⾏，⽤⼾是否都能收到push消息
        6>⽤⼾未登录，是否能接受到push消息
        7>⽤⼾⻓时间未登录，后续第⼀次登录时，是否会收到历史推送消息
    2.强制更新需要测试的点有：
        1>强制升级是否可以升级成功，功能是否正常
        2>升级后的数据是否正常
        3>强制升级的弹窗是否可以关闭
        4>强制更新的提⽰，包括未更新和已更新
        5>版本号对⽐等等
    3.⾮强制更新的测试点有：
        1>提⽰弹框的显⽰，是否可以选择暂不更新和⽴即更新；是否可以关闭弹框不显⽰
        2>选择暂不更新后，⽼版本是否可以正常使⽤
        3>选择⽴即更新后，更新能否成功，新版本号是否是最新版本；功能是否是最新的
        4>⾮强制更新弹框的提⽰频率，是每天⼀次还是每周⼀次，根据需求来测
        5>APP设置⾥的版本更新，是否也能触发⾮强制更新
        6>⽤⼾选择继续使⽤⽼版本后，使⽤某些新版本才有的功能时，是否还有更新提⽰
        7>版本号对⽐等等
    总结：强制升级⼀般⽤于版本改动较⼤，业务较重要，功能模块存在⻛险的情况；⾮强制更新适⽤于版本改动不是很⼤，对业务影响不⼤，不存在⻛险问题的。
    
20、app兼容性测试一般都考虑那些方面的兼容性，每个方面列举不少于3条。【10分】
    新旧版本兼容测试、不同机型测试（系统兼容性、屏幕兼容性、分辨率兼容、尺⼨兼容）、不同⽹络兼容
    1.新旧版本兼容性测试：新旧版本覆盖安装升级正常、新增功能，新旧版本覆盖安装后使⽤正常
    2.不同机型测试：
        (1)系统兼容性：
            iOS系统：iOS11.x、iOS12.x、iOS13.x、iOS14.x、iOS15.x、iOS16.x、iOS17.x
            Android系统：Android5.x、Android6.x、Android7.x、Android8.x、Android9.x、Android10.x、Android11.x、Android12.x、Android13.x、Android14.x
        (2)屏幕兼容性
            iOS：
                （1）刘海屏：例如：iPhone X、iPhone Xs 、iPhone?XR、iPhone 11、iPhone 11 Pro、iPhone 11 pro max、
                                iPhone 12、iPhone 12 pro 、iPhone 12 pro max、iPhone 12 mini、iPhone 13 mini、iPhone 14 Pro等
                （2）⾮刘海屏：例如：iPhone 8、iPhone 8 plus、iPhone 7、iPhone 7 plus、iPhone 6、iPhone 6s、iPhone 6s plus、
                                iPhone 5s
                （3）直⾯屏：例如：iPhone 15 pro max 
            Android：
                （1）全⾯屏：例如：华为P30、红⽶K30⾄尊纪念版、荣耀X10、Vivo APEX 2020等
                （2）⾮全⾯屏：例如：华为P10、华为P10 plus、荣耀8等
                （3）曲⾯屏：例如：三星Galaxy S10+、三星Galaxy Note 10+ 5G、华为Mate30 Pro、华为P30 Pro、vivo NEX3等
                （4）折叠屏：例如：华为Mate XS 5G、华为mate X2、三星Galaxy Z Fold2 5G、三星 Galaxy W21 5G
    3.分辨率兼容性
    4.尺⼨兼容性
        iOS主要机型尺⼨：4⼨-6.7⼨
        Android主要机型尺⼨：5⼨-6.7⼨
    5.不同⽹络兼容性
        Wi-Fi切换4G/5G⽹络情况下功能是否正常
        4G/5G⽹络切换Wi-Fi情况下功能是否正常
        有⽹切换⽆⽹情况下功能是否正常
        ⽆⽹切换有⽹情况下功能是否正常
'''